package com.study.config;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

/**登录拦截器（示例）
	实现步骤：
	1、 继承抽象类HandlerInterceptorAdapter
	2、 实现接口WebMvcConfigurer
	3、重写预处理方法preHandle，编写拦截规则
	4、重写addInterceptors方法，编写拦截url地址和放行url地址	
 * @author WuJin
 */
@Configuration
public class LoginInterceptor extends HandlerInterceptorAdapter implements WebMvcConfigurer {
	/* preHandle 请求处理之前进行调用。(预处理)
     */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws IOException {
		System.out.println("preHandle......");
		// 判断请求中是否存在特定的session对象
		if (request.getSession().getAttribute("erpUser") == null) {
			// session中无对应对象元素
			// 跳转到Vue首页http://localhost:8089/
			response.sendRedirect("http://localhost:8089/");
			return false;// 拦截(表示请求结束，后续的Interceptor和Controller都不会再执行)
		}
		return true;// 放行(调用当前请求的Controller中的方法)
	}

	/*
	 * 登录拦截的地址
	 * 假设请求http://localhost:8089/admin/main。如果没有对应的session对象，则会默认转到http://localhost:
	 * 8089/ 首页不存在，则会启动全局异常，跳转到error.jsp页面
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		System.out.println("登录地址拦截......");
		registry.addInterceptor(this)
		.addPathPatterns("/admin", "/admin/**")
		.excludePathPatterns("/", "/login",	"/error", "/js/**", "/css/**", "/imgs/**");
	}

}
